/*
    使用TS的方式创建 store
        1. ceateStore
        2. 需要定义 state 和 action  的类型
*/
import { createStore } from "redux";
import { Hide_Toast, SetActionCode, Show_Toast } from "./ActionType";

const defState: IRootState = {
  // 所有跟 toast 相关的数据
  toastData: {
    isShow: false,
    message: "测试信息",
    type: "success",
  },
  // 有一个当前默认的学科actioncode
  actionCode: "",
};

const reducer = (state: IRootState = defState, action: IStateAction) => {
  state = JSON.parse(JSON.stringify(state));
  // 通过action进行判断，是否是要显示 toast
  switch (action.type) {
    case Show_Toast:
      // 此时pyload 应该是一个对象，里面包含三个跟toast相关的数据
      // 还要把 message 和 type 也修改
      state.toastData = action.pyload as ToastData; // as 是把前面的数据转换 后面的类型
      // 把isShow改为true
      state.toastData.isShow = true; // 保证 isShow 一定是true
      break;
    case Hide_Toast:
      // 只需要把 isShow 变成false就行
      state.toastData.isShow = false;
      break;
    case SetActionCode:
      // 直接把 actionCode 修改为 pyload
      state.actionCode = action.pyload as string;
      break;
  }

  return state;
};

const store = createStore(reducer);
export default store;
